package thread;
/**
 * 多线程
 * 线程:一个单一的顺序执行流程就是一个线程
 * 多线程:多个顺序执行流程"同时"执行
 *
 * 线程的第一种创建方式:
 * 1:继承Thread
 * 2:重写run方法定义线程执行的任务代码
 * 3:调用线程的start方法将线程启动
 */
public class ThreadDemo2 {

    public static void main(String[] args) {
        Runnable r1 = new MyRunnable1();
        Runnable r2 = new MyRunnable2();
        Thread t1 = new Thread(r1   );
        Thread t2 = new Thread(r2);
        new Thread(new MyRunnable3()).start();
        new Thread((new MyRunnable4())).start();
        t1.start();
        t2.start();
        new Thread(() -> System.out.println("第三种方式。"));

        //第一种
        Thread t01 = new MyThread01();
        t01.start();
        //第二种
        Thread t02 = new Thread(new MyRunnable01());

    }

}
class MyRunnable1 implements Runnable{
    @Override
    public void run() {
        for(int i = 0;i < 1000;i ++){
            System.out.println("你谁啊？？？");
        }
    }
}
class MyRunnable2 implements Runnable{
    @Override
    public void run() {
        for(int i = 0;i < 1000;i ++){
            System.out.println("大表哥？？？");
        }
    }
}

class MyRunnable3 implements Runnable {
    @Override
    public void run() {
        for(int i = 0;i < 1000;i ++){
            System.out.println("我不是。");
        }
    }
}
class MyRunnable4 implements Runnable{
    @Override
    public void run() {
        for(int i = 0;i < 1000;i ++){
            System.out.println("你想哪里来；");
        }
    }
}

/**
 * 继承类方法
 */
class MyThread01 extends Thread{
    @Override
    public void run() {
        for(int i = 0;i < 1000;i ++){
            System.out.println("第一种方法，继承类，重写run");
        }
    }
}

/**
 * 继承接口
 */
class MyRunnable01 implements Runnable{
    @Override
    public void run() {
        for(int i = 0;i < 1000;i ++){
            System.out.println("第二种方式，实现接口，重写run");
        }
    }
}